package dao;

import entidade.Contato;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Persistence;
import javax.persistence.Query;
// classe com métodos CROUD(criação, atualização, exclusão e busca no banco de dados)

public class ContatoDAO {

    // o bjeto "em" será váriavel que manipulá o banco de dados junto a aplicação 

    private EntityManager em = Persistence.createEntityManagerFactory("agendaPU").createEntityManager();

    // 

    public Contato obter(Integer id) {
        Contato resposta = null;
        // quarda dentro da variável "quey" a busca realizada no banco
        String quey = "Select c FROM Contato c WERE c.id=:id";
        // cria uma variável consulta a partir da variável de maninulação 
        Query q = em.createQuery(quey);
        // A variável recebe a consulta comparando os ids e assegurando o resultado.
        resposta = (Contato) q.setParameter("id", id).getSingleResult();

        return resposta;
    }

    public List<Contato> obterTodos() {
        List<Contato> resposta = null;

        String query = "Select c FROM Contato c";
        Query q = em.createQuery(query);
        resposta = q.getResultList();
        // retotna a lista de objetos do banco de dados 
        return resposta;
    }

    public boolean salvar(Contato contato) {
        try {
            //inicia transação com banco
            em.getTransaction().begin();
            // tenta salvar o obejto contato no banco
            em.persist(contato);
            // faz a atualização da tranzação
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            //verifica se a conexão está aberta  
            if (em.isOpen()) {
                // retorna para inicio do procedimento de transação
                em.getTransaction().rollback();
            }
            
            return false;
        }
    }
    
    public boolean atualizar (Contato contato){
        try {
            em.getTransaction().begin();
            em.merge(contato);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            if (em.isOpen()) {
                em.getTransaction().rollback();
            }
            return false;
        }
    }
    public boolean remover (Contato contato){
        try {
            em.getTransaction().begin();
            em.remove(contato);
            em.getTransaction().commit();
            return true;
        } catch (Exception e) {
            if (em.isOpen()) {
                em.getTransaction().rollback();
            }
            return false;
        }
 
    
    }
}
